package com.cysoft.starter.repeat.config;

import com.cysoft.starter.repeat.core.properties.RepeatSubmitProperties;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

/**
 * @author 玖零
 * @version V0.0.1
 * @project cysoft-spring-boot-starter-repeat
 * @package com.cysoft.starter.repeat.config
 * @date 2025-03-02 14:54
 * @desc 防重复提交自动装配
 */
@Configuration
@EnableConfigurationProperties(RepeatSubmitProperties.class)
@ConditionalOnProperty(prefix = "cysoft.repeat", name = "enable", havingValue = "true")
public class RepeatAutoConfiguration {


    /**
     * 默认配置：使用ThreadLocal方式
     * 当配置文件中以 "cysoft.repeat" 为前缀，属性名为 "output.cacheType" 的值等于 "local" 时，该方法才会被调用，从而创建对应的配置。
     */
    @Bean
    @ConditionalOnProperty(prefix = "cysoft.repeat", name = "cacheType",havingValue = "local")
    public void localConfiguration() {
    }

    /**
     * 使用redis方式
     * 当配置文件中以 "cysoft.repeat" 为前缀，属性名为 "output.cacheType" 的值等于 "redis" 时，该方法才会被调用，从而创建对应的配置。
     */
    @Bean
    @ConditionalOnProperty(prefix = "cysoft.repeat", name = "cacheType",havingValue = "redis")
    public void redisCacheConfiguration() {
    }

    /**
     * 使用Caffeine方式
     * 当配置文件中以 "cysoft.repeat" 为前缀，属性名为 "output.cacheType" 的值等于 "caffeine" 时，该方法才会被调用，从而创建对应的配置。
     */
    @Bean
    @ConditionalOnProperty(prefix = "cysoft.repeat", name = "cacheType",havingValue = "caffeine")
    public void caffeineConfiguration() {
    }


}
